package com.bbva.cbm.web.servlet.spring.operatoria;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.ModelAndView;

import cbm.commons.BaseController;
import ejb.com.bbva.cbm.dominio.Caja;
import ejb.com.bbva.cbm.dominio.MontoDenominacion;
import ejb.com.bbva.cbm.service.OperativaServiceLocal;
import ejb.com.bbva.cbm.util.Constante;


public class CierreController  extends BaseController{
	
	private OperativaServiceLocal operativaServiceLocal;
	
	@Autowired
	public void setOperativaServiceLocal(OperativaServiceLocal operativaServiceLocal) {
		this.operativaServiceLocal = operativaServiceLocal;
	}

	public ModelAndView cerrarCaja(HttpServletRequest request, HttpServletResponse response){
		return null;
	}

	public ModelAndView open(HttpServletRequest request, HttpServletResponse response){
		HttpSession session = null;
		String paginaSig = resources.getString("cierre_caja");
		
		try {
			String oficinaId = getOficinaId(request);
			String terminalId = getTerminalId(request);
			String tipo = "Caja";
			long tipoId = Constante.PARA_TIPO_CAJA_ID;
			if("boveda".equals(request.getParameter("tipo"))) {
				tipo = "Boveda";
				tipoId = Constante.PARA_TIPO_BOVEDA_ID;
			}
			request.setAttribute("tipo", tipo);
			request.setAttribute("cajas", operativaServiceLocal.obtenerDatosCierreCaja(oficinaId, terminalId, tipoId));
			request.setAttribute("ESTADO_CAJA_CERRADA_ID", Constante.ESTADO_CAJA_CERRADA_ID);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return new ModelAndView(paginaSig);
	}
	
	public ModelAndView save(HttpServletRequest request, HttpServletResponse response) {
		String paginaSig    = resources.getString("ajaxrequest");
		String xml          = "";
		try {
			String terminalId = getTerminalId(request);
			long divisaId = Long.parseLong(request.getParameter("divCod"));
			long cajaId   = Long.parseLong(request.getParameter("cajCod"));
			long tipoId   = ("Caja".equals(request.getParameter("tipo")))?Constante.PARA_TIPO_CAJA_ID:Constante.PARA_TIPO_BOVEDA_ID;
			String[] secuenciaIds = request.getParameterValues("i");
			String[] montos       = new String[secuenciaIds.length];
			for (int i = 0; i < secuenciaIds.length; i++) {
				montos[i] = request.getParameter("m"+secuenciaIds[i]).replaceAll(",", "");
			}
			Caja caja =  new Caja();
			caja.setCajaId(cajaId);
			caja.setTipoId(tipoId);
			caja.setDivisaId(divisaId);
			caja.setTerminalId(terminalId);
			caja.setMontoDeteriorados(Double.parseDouble(request.getParameter("monDet").replaceAll(",", "")));
			caja.setMontoTotal(Double.parseDouble(request.getParameter("monTot").replaceAll(",", "")));
			caja.setPatronCalidad(Double.parseDouble(request.getParameter("patCal").replaceAll(",", "")));
			List<MontoDenominacion> montosDenominacion = new ArrayList<MontoDenominacion>();
			for (int i = 0; i < secuenciaIds.length; i++) {
				MontoDenominacion monto = new MontoDenominacion();
				monto.setSecuenciaId(Long.parseLong(secuenciaIds[i]));
				monto.setDenominacionId(Long.parseLong(secuenciaIds[i]));
				monto.setValorIngresado(Double.parseDouble(montos[i]));
				montosDenominacion.add(monto);
			}
			caja.setMontosDenominacion(montosDenominacion);
			
			operativaServiceLocal.grabarDatosCierreCaja(caja, getLoginUsuario(request));
			
			xml = "exito&Los datos de la apertura fueron grabados exitosamente";
		} catch (Exception e) {
			xml = "error&No se pudo realizar la operaci�n";
			e.printStackTrace();
		}
		return new ModelAndView(paginaSig, "responseText", xml);
	}
}